Ce document présente quelques traitements pour le module Mobilité et TIC du master Transport Mobilité Environnement Climat (TMEC) de l’Université de Bourgogne (cf. Présentation pdf). Pour progresser dans l’utilisation du logiciel R, télécharger et/ou acheter le manuel du Groupe ElementR, R et Espace. Traitement de l’information géographique : http://framabook.org/16-r-et-espace.
Deux exercices sont proposés :
Dans les deux cas, les données disponibles pour l’exercice sont les suivantes:
Les deux exemples sont traités successivement, New York-Citibike puis Marseille-Twitter. Deux packages sont utilisés pour la manipulation des données, trois packages sont utilisés pour le traitement des données spatiales.
library(sp) # gestion des formats spatiaux
library(rgdal) # manipulation des formats spatiaux
library(OpenStreetMap) # manipulation des fonds OpenStreetMap
library(reshape2) # transposition des matrices
library(dplyr) # manipulation des données
On commence par charger toutes les données nécessaires. Le dossier DATA contient les fichiers bruts (format .csv pour les tableaux et .shp pour les données spatiales) mais aussi un fichier .RData qui rassemble toutes les données nécessaires et qui peut être chargé directement dans R. Les données sont les suivantes :
data.frame). Données téléchargeables sur le site http://www.citibikenyc.com/system-datadata.frame). Données téléchargeables sur le site http://www.census.gov/population/metro/data/other.htmlSpatialPoints). Position extraite à partir du tableau téléchargé sur le site (variables long-lat).SpatialPolygons). Données téléchargeables sur le site https://www.census.gov/geo/maps-data/data/cbf/cbf_counties.html.OpenStreetMap).Toutes les données spatiales ont été transformées dans le système de projection NAD_1983_StatePlane_New_York_Long_Island_FIPS_3104_Feet, code EPSG 102718.
load("DATA/NYC/DataNewYork.RData")
On peut cartographier les données spatiales, d’abord les stations sur le fond OSM (la fonction plot() ne fonctionnera que si les packages OpenStreetMap et sp sont installés et chargés) :
plot(mapManhattan)
plot(spStations, add = TRUE, pch = 20, col = "firebrick")
Puis les comtés sur le fond OSM correspondant :
plot(mapCsa)
plot(spCounties, add = TRUE, col = "#FF660050", border = "white")
Le tableau est composé de 641 329 lignes et 12 colonnes. Chaque ligne représente un trajet. Ce tableau est une sélection, à partir de l’ensemble des trajets du mois de mai 2014, des trajets réalisés en jour ouvrable (lundi-vendredi).
Commencer par explorer les variables quantitatives avec les fonctions summary(), hist(), etc. Explorer ensuite les variables qualitatives avec la fonction table().
Idées de traitements à développer (liste purement indicative, à prendre entièrement, partiellement ou à laisser) :
Éléments à discuter dans la présentation et dans le dossier (à prendre en compte absolument) :
On commence par charger toutes les données nécessaires. Le dossier DATA contient les fichiers bruts (format .csv pour les tableaux et .shp pour les données spatiales) mais aussi un fichier .RData qui rassemble toutes les données nécessaires et qui peut être chargé directement dans R. Les données sont les suivantes :
data.frame). Ce type de données peut être extrait de l’API Twitter, disponible à l’adresse https://dev.twitter.comdata.frame). Il ne s’agit pas de l’aire urbaine “définition Insee” : l’espace d’étude dans cet exercice comprend une bonne partie de l’aire urbaine d’Aix-Marseille, plus d’autres aires plus petites (Arles ou Salons par exemple) plus quelques communes multipolarisées limitrophes. Cet délimitation n’existe pas en dehors de cet exercice, elle délimite un espace qui sera désigné par le terme “aire urbaine Aix-Marseille-Arles”. Données téléchargeables sur le site http://www.insee.fr/fr/bases-de-donneesSpatialPoints). Position extraite à partir du tableau téléchargé sur l’API Twitter (variables long-lat).SpatialPolygons). Données téléchargeables sur le site http://professionnels.ign.fr/geofla.OpenStreetMap).Toutes les données spatiales ont été transformées dans le système de projection RGF93 / Lambert93, code EPSG 2154.
Attention, les tweets sont l’exemple même de données qu’on peut recycler dans une analyse de la mobilité mais avec prudence. Ne jamais oublier que l’essence du tweet est le message et non la localisation :
Ptofoddrrr une pote a moi elle est enceinte plus jamais jlui parle a cte pute
Je chie sur les assureurs
Je vais voir l'homme de ma vie Papa
Je donne limite ma main à couper qu'on aura un sujet Histoire sur les mémoires de la 2GM
En faite hier ils ont passé un seul épisode de The Good Wife
J'ai eu 16 en français grâce a l'OM
Mon bébé me manque
Monfils tu regale
load("DATA/Marseille/DataMarseille.RData")
On peut cartographier les données spatiales, d’abord les tweets géolocalisés sur le fond OSM (la fonction plot() ne fonctionnera que si les packages OpenStreetMap et sp sont installés et chargés) :
plot(mapMars)
plot(spTweets, add = TRUE, pch = 18, col = "#FF660020")
Puis les communes (arrondissements pour Marseille) sur le fond OSM correspondant :
plot(mapMars)
plot(spCommunes, add = TRUE, col = "#FF660050", border = "white")
Le tableau est composé de 393 722 lignes et 7 colonnes. Chaque ligne représente un tweet. Ce tableau contient l’ensemble des tweets géolocalisés envoyés depuis le périmètre à l’étude au cours de mois de juin-juillet. Plusieurs champs ont été effacés (le contenu du message en particulier), les identifiants des tweets et des utilisateurs ont été modifiés pour garantir l’anonymat.
Idées de traitements à développer (liste purement indicative, à prendre entièrement, partiellement ou à laisser) :
Éléments à discuter dans la présentation et dans le dossier (à prendre en compte absolument) :
Ces deux fonctions permettent de faire une jointure de données externes sur la table attributaire des données spatiales (AttribJoin) et de discrétiser automatiquement une variable quantitative (Discretimatic). Pour exporter l’objet spatial et le travailler dans un logiciel de SIG, utiliser la fonction writeOGR() en précisant le format, par exemple driver = "ESRI Shapefile".
AttribJoint <- function(df, # Tableau externe, data.frame
spdf, # Objet spatial
df.field, # Identifiant dans le tableau externe
spdf.field) # Identifiand dans l'objet spatial
{
if(is.factor(spdf@data[ , spdf.field]) == TRUE) {
spdf@data[ , spdf.field] <- as.character(
spdf@data[ , spdf.field]
)
}
if(is.factor(df[ , df.field]) == TRUE) {
df[ , df.field] <- as.character(df[ , df.field])
}
spdf@data <- data.frame(
spdf@data,
df[match(spdf@data[ , spdf.field], df[ , df.field]), ]
)
return(spdf)
}
DiscretiMatic <- function(vec) # variable quantitative à discrétiser
{
normTest <- shapiro.test(vec)
if(normTest$p.value > 0.1) {
print("Discrétisation autour de la moyenne")
valBreaks <- c(min(vec),
mean(vec) - sd(vec),
mean(vec),
mean(vec) + sd(vec),
max(vec))
varDiscret <- cut(vec,
breaks = valBreaks,
include.lowest = TRUE,
right = FALSE)
} else {
print("Discrétisation en quartiles")
valBreaks <- quantile(vec,
probs = c(0, 0.25, 0.5, 0.75, 1))
varDiscret <- cut(vec,
breaks = valBreaks,
include.lowest = TRUE,
right = FALSE)
}
return(varDiscret)
}